package com.ht.api.callback.impl;

import java.util.Arrays;
import java.util.List;

import com.ht.api.open.OpenUtil;
import com.ht.api.service.ExternalContactService;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 外部联系人免验证添加成员事件
 * @author asq
 * @createTime 2025年1月17日 13:26:47
 */
@Slf4j
public class WwxAddHalfExternalContactCallbackFunction extends BaseCallbackFunction{
	/** 接口ID：获取客户详情 */
	private static final long API_ID = 1880467758525845504L;

	@Override
	protected List<String> buildSourceDataList(JSONObject params) {
		String externalUserID = params.getStr("ExternalUserID");
		String userID = params.getStr("UserID");
		String state = params.getStr("State");
		String createTime = params.getStr("CreateTime");

        // 调用接口：获取客户详情
        JSONObject wxParam = JSONUtil.createObj();
        wxParam.set("external_userid", externalUserID);
		String str = OpenUtil.call(appid, API_ID, wxParam, true);
		
		// 更新接粉组相关的数量
		ExternalContactService.updateInCnt(getTenantDs(appid), state, userID, createTime);
		
		// 解析接口返回回来的数据，根据回调中的UserID与客户详情接口返回数据中的follow_user里面的userid进行匹配，将不符合回调中的userid全部删除掉
		return Arrays.asList(filterFollowUserByUserId(str, userID));
	}

	/**
	 * 解析接口返回回来的数据，根据回调中的UserID与客户详情接口返回数据中的follow_user里面的userid进行匹配
	 * @param jsonStr 接口返回回来的数据
	 * @param targetUserId follow_user里面的userid
	 * @return
	 */
	private String filterFollowUserByUserId(String jsonStr, String targetUserId) {
	    try {
	        // 解析JSON
	        JSONObject json = JSONUtil.parseObj(jsonStr);
	        
	        // 获取 follow_user 数组
	        JSONArray followUsers = json.getJSONArray("follow_user");
	        if (followUsers == null || followUsers.isEmpty()) {
	            return jsonStr;
	        }
	        
	        // 过滤数组，只保留匹配的用户
	        JSONArray filteredUsers = new JSONArray();
	        for (int i = 0; i < followUsers.size(); i++) {
	            JSONObject user = followUsers.getJSONObject(i);
	            if (targetUserId.equals(user.getStr("userid"))) {
	                filteredUsers.add(user);
	            }
	        }
	        
	        // 替换原数组
	        json.set("follow_user", filteredUsers);
	        
	        // 返回处理后的JSON字符串
	        return json.toString();
	    } catch (Exception e) {
	        log.error("过滤follow_user失败", e);
	        return jsonStr;  // 发生错误时返回原字符串
	    }
	}
}
